package com.meiya.hugegraph.schema;

import org.apache.hugegraph.driver.HugeClient;
import org.apache.hugegraph.driver.SchemaManager;

public class TransactionSchema {

    public static void main(String[] args) {
        // 连接到HugeGraph服务器
        HugeClient hugeClient = HugeClient.builder("http://localhost:8080", "hugegraph")
                .configTimeout(20) // 默认 20s 超时
                .build();

        // 获取schema管理器
        SchemaManager schema = hugeClient.schema();

        // 创建属性键
        schema.propertyKey("cardNumber").asText().ifNotExist().create();      // 卡号
        schema.propertyKey("holderName").asText().ifNotExist().create();      // 持卡人姓名
        schema.propertyKey("amount").asDouble().ifNotExist().create();        // 交易金额
        schema.propertyKey("transTime").asDate().ifNotExist().create();       // 交易时间
        schema.propertyKey("ukey").asText().ifNotExist().create();            // 交易唯一标识

        // 创建顶点标签 - 卡
        schema.vertexLabel("card")
              .properties("cardNumber", "holderName")
              .primaryKeys("cardNumber")
              .ifNotExist()
              .create();

        // 创建边标签 - 交易关系
        schema.edgeLabel("transaction")
              .sourceLabel("card")
              .targetLabel("card")
              .properties("amount", "transTime", "ukey")
              .nullableKeys("amount", "transTime")
              .multiTimes()
              .sortKeys("ukey")
              .ifNotExist()
              .create();

        // 创建索引
        schema.indexLabel("cardByHolder")
              .onV("card")
              .by("holderName")
              .secondary()
              .ifNotExist()
              .create();

        schema.indexLabel("transactionByUkey")
              .onE("transaction")
              .by("ukey")
              .unique()
              .ifNotExist()
              .create();

        schema.indexLabel("transactionByTime")
              .onE("transaction")
              .by("transTime")
              .range()
              .ifNotExist()
              .create();

        schema.indexLabel("transactionByAmount")
              .onE("transaction")
              .by("amount")
              .range()
              .ifNotExist()
              .create();

        System.out.println("交易数据Schema创建完成！");

        hugeClient.close();
    }
}
